/**
***************************************************************
*@file  AS8510.h 
*@brief AS8510.h 
*@author 花满楼
*@date     2019-5-24 
*@version  V2
*@note AS8510的具体款式是I1500，电流采样范围1500A，PGA gain是5.
***************************************************************
*/
#ifndef __AS8510_H
#define __AS8510_H
#include "sys.h"

//
/**@name    AS8510系列/Q系列芯片指令列表
* @{
*/
#define W_COM_DRESS1    0X05
#define DEC_REG_R1_I    0X45
#define DEC_REG_R2_I    0XC5
#define FIR_CTL_REG_I   0X04
#define CLK_REG         0X20
#define RESET_REG       0XC0
#define MOD_CTL_REG     0x07

#define W_COM_DRESS2    0X45
#define DEC_REG_R1_V    0X45
#define DEC_REG_R2_V    0XC5
#define FIR_CTL_REG_V   0X04

#define W_COM_DRESS3    0X13
#define PGA_CTL_REG     0X00
#define PD_CTL_REG_1    0XCF
#define PD_CTL_REG_2    0XFF
#define PD_CTL_REG_3    0XF8
/**@} */

extern float Ins_Det_P, Ins_Det_M;  ///<正和负极的绝缘检测

#define AS5810_VP_CS        PIout(0)        ///<AS8510的片选信号   正string电压
#define AS5810_VN_CS        PEout(11)       ///<AS8510的片选信号   负string电压
#define AS5810_IP_CS        PHout(5)        ///<AS8510的片选信号   正string电流
#define AS5810_IN_CS        PGout(8)        ///<AS8510的片选信号   负string电流

//
/**@name    绝缘监测相关内容，暂时未使用
* @{
*/
#define Ins_VH_P PFout(13)
#define Ins_VH_G PFout(14)
#define Ins_VL_P PFout(15)
#define Ins_VL_G PGout(0)
/**@} */

void AS8510_Init(void);
u8 AS8510_ReadSR(u8 regno);             ///<读取状态寄存器

void AS8510_V_Read(u8 *pBuffer, u32 ReadAddr, u16 NumByteToRead);    ///<读取flash
void AS8510_V_Write(void);    ///<写入flash

void AS8510_VB_Read(u8 *pBuffer, u32 ReadAddr, u16 NumByteToRead);    ///<读取flash
void AS8510_VB_Write(void);    ///<写入flash  AS5810_Ins

void AS8510_I_Read(u8 *pBuffer, u32 ReadAddr, u16 NumByteToRead);    ///<读取flash
void AS8510_I_Write(void);    ///<写入flash  AS5810_Ins

void AS8510_Ins_Read(u8 *pBuffer, u32 ReadAddr, u16 NumByteToRead);    ///<读取flash
void AS8510_Ins_Write(void);    ///<写入flash


void Rack_VP_Read(u16 *REG_V1, float *Load_VP);	///<正string的电池电压和负载电压检测
void Rack_VN_Read(u16 *REG_V1, float *Load_VN); ///<负string的电池电压和负载电压检测
void Rack_IP_Read(s16 *REG_IP);		///<正string的电池电流
void Rack_IN_Read(s16 *REG_IN);		///<负string的电池电流


void Rack_Ins_Det(u8 *Gener_Reg);
void Rack_Ins_Calu(u8 *Gener_Reg);


#endif
